'''
    许多情况下，需要向客户端返回一些特定的错误，比如

    客户端没有足够的权限进行该操作
    客户端无权访问该资源
    客户端尝试访问的项目不存在
'''

# HTTPException
#
# 要将带有错误的 HTTP 响应（状 态码和响应信息）返回给客户端，需要使用 HTTPException
# HTTPException 是一个普通的 exception，包含和 API 相关的附加数据
# 因为是一个 Python exception ，应该 raise 它，而不是 return 它

'''
    status_code：响应状态吗
    detail：报错信息
    headers：响应头
'''

import uvicorn
from fastapi import FastAPI, HTTPException, status

app = FastAPI()

items = {"foo": "The foo Wreslters"}


@app.get("/items/{item_id}")
async def read_item(item_id: str):
    if item_id not in items:
        raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="item_id 不存在")
    return {"item": items[item_id]}


'''
    重点
    detail可以传递任何可以转换为 JSON 字符串的值给 detail 参数，而不仅仅是 str，可以是 dict、list
    它们由 FastAPI 自动处理并转换为 JSON
'''

if __name__ == "__main__":
    uvicorn.run(app="main:app", host="127.0.0.1", port=8000, reload=True, debug=True)